package pe.edu.upc.jtigers.svpn.domain.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Usuario implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4928347901272043091L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int idUsuario;
	private String nombres;
	private String apePaterno;
	private String apeMaterno;
	private String sexo;
	private String numDocumento;
	private String correoElectronico;
	private String celular;
	private String direccion;
	private String tipoUsuario;
	private Date fechaNacimiento;
	private String contrasena;
	private boolean eliminado;
	// Un usuario tiene a un solo Perfil
	@ManyToOne
	@JoinColumn(name = "IdPerfil")
	private Perfil perfil;
	// Un usuario cuenta con un tipo de documento
	@ManyToOne
	@JoinColumn(name = "IdDetalleParametro")
	private DetalleParametro tipoDocumento;
	@ManyToOne
	@JoinColumn(name = "IdMenuVisitado")
	@Basic(optional = true)
	private Menu ultimoMenuVisitado;

	public Usuario() {
		this.tipoDocumento = new DetalleParametro();
	}

	public int getIdUsuario() {
		return idUsuario;
	}

	public void setIdUsuario(int idUsuario) {
		this.idUsuario = idUsuario;
	}

	public String getNombres() {
		return nombres;
	}

	public void setNombres(String nombres) {
		this.nombres = nombres;
	}

	public String getApePaterno() {
		return apePaterno;
	}

	public void setApePaterno(String apePaterno) {
		this.apePaterno = apePaterno;
	}

	public String getApeMaterno() {
		return apeMaterno;
	}

	public void setApeMaterno(String apeMaterno) {
		this.apeMaterno = apeMaterno;
	}

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getNumDocumento() {
		return numDocumento;
	}

	public void setNumDocumento(String numDocumento) {
		this.numDocumento = numDocumento;
	}

	public String getCorreoElectronico() {
		return correoElectronico;
	}

	public void setCorreoElectronico(String correoElectronico) {
		this.correoElectronico = correoElectronico;
	}

	public String getCelular() {
		return celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public Date getFechaNacimiento() {
		
		return fechaNacimiento;
	}

	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}

	public String getContrasena() {
		return contrasena;
	}

	public void setContrasena(String contrasena) {
		this.contrasena = contrasena;
	}

	public String getTipoUsuario() {
		return tipoUsuario;
	}

	public void setTipoUsuario(String tipoUsuario) {
		this.tipoUsuario = tipoUsuario;
	}

	public boolean isEliminado() {
		return eliminado;
	}

	public void setEliminado(boolean eliminado) {
		this.eliminado = eliminado;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public DetalleParametro getTipoDocumento() {
		return tipoDocumento;
	}

	public void setTipoDocumento(DetalleParametro tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

	public Menu getUltimoMenuVisitado() {
		if (this.ultimoMenuVisitado == null) {
			this.ultimoMenuVisitado = new Menu();
		}
		return ultimoMenuVisitado;
	}

	public void setUltimoMenuVisitado(Menu ultimoMenuVisitado) {
		this.ultimoMenuVisitado = ultimoMenuVisitado;
	}
}
